package com.wcs.exam.common.enums;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 题目类型(1:单选题、2:多选题、3:判断题、4:填空题、5:简答题)
 *
 * @author wcs
 */
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum QuestionTypeEnum {

    /**
     * 单选题
     */
    SINGLE_CHOICE(1, "单选题"),

    /**
     * 多选题
     */
    MULTIPLE_CHOICE(2, "多选题"),

    /**
     * 判断题
     */
    JUDGMENT(3, "判断题"),

    /**
     * 填空题
     */
    GAP_FILLING(4, "填空题"),

    /**
     * 简答题
     */
    SHORT_ANSWER(5, "简答题");

    /**
     * 编码
     */
    private final Integer code;

    /**
     * 描述
     */
    private final String desc;

    /**
     * 根据编码获取题目类型枚举
     *
     * @param code 编码
     * @return 题目类型
     */
    public static QuestionTypeEnum byCode(Integer code) {
        if (code == null) {
            return null;
        }
        QuestionTypeEnum[] enums = QuestionTypeEnum.values();
        for (QuestionTypeEnum typeEnum : enums) {
            if (typeEnum.getCode().equals(code)) {
                return typeEnum;
            }
        }
        return null;
    }

    /**
     * 根据编码获取题目类型枚举
     *
     * @param desc 描述
     * @return 题目类型
     */
    public static QuestionTypeEnum byDesc(String desc) {
        if (desc == null) {
            return null;
        }
        QuestionTypeEnum[] enums = QuestionTypeEnum.values();
        for (QuestionTypeEnum typeEnum : enums) {
            if (typeEnum.getDesc().equals(desc)) {
                return typeEnum;
            }
        }
        return null;
    }

    /**
     * 判断该题型是否存在选项（包含：单选、多选、判断）
     *
     * @param code 编码
     * @return 是否存在选项
     */
    public static Boolean isExistOption(Integer code) {
        if (code == null) {
            return Boolean.FALSE;
        }
        return QuestionTypeEnum.SINGLE_CHOICE.getCode().equals(code) || QuestionTypeEnum.MULTIPLE_CHOICE.getCode().equals(code) || QuestionTypeEnum.JUDGMENT.getCode().equals(code);
    }
}
